#include "../libreria.h"
#include "../response_get_list.h"
#include <signal.h>
int s;
void deregistra(int sig_receive)
{
	close(s);
}


int main(int argc, char * argv[])
{
	char msg [BUFFER_SIZE];
	char nome_servizio [BUFFER_SIZE];
	char ip_service_register [BUFFER_SIZE];
	int porta_service_register;
	int r;
	
	host service_provider;

	signal(SIGINT,deregistra);
	if (argc != 4)
	{
		printf("Errore numero parametri:\nUsage: ./client_get_list ip_service_register porta_service_register nome_servizio\n");
		exit(1);
	}

	
	strcpy( ip_service_register, argv[1] );
	porta_service_register = atoi(argv[2]);//porta server passata da parametro
	strcpy( nome_servizio, argv[3] );

	/////////// INIZIALIZZAZIONE SOCKET PER CONNESSIONE SERVICE REGISTER /////////////

	s = inizializza_client( ip_service_register, porta_service_register );
	
	////////// INVIO MESSAGGI PER CONTATTARE SERVICE REGISTER //////////////
	
	sprintf(msg,"2;%s#",argv[3]);
	if(send(s,msg,strlen(msg),0) == -1)
	{
		printf("Errore nell'invio del messaggio per contattare il Service Register\n");
		exit(1);
	}
	/////////// RICEZIONE RISPOSTA DA SERVICE REGISTER ////////////////////
	
	memset( msg, 0, BUFFER_SIZE );
	r = recv ( s, msg, BUFFER_SIZE, 0 );
	if (r == -1)
	{
		printf("Errore ricezione risposta dal Service Register\n");
		exit(1);
	}
	if(msg[0] == '0')
	{ 
		printf("Errore, il servizio richiesto non è disponibile\n");
		exit(1);
	}
	
	decode_msg_from_service_register( msg, service_provider.ip, &service_provider.porta );
	
	close(s);
	
	//////////  CHIUSURA CONNESSIONE SERVICE REGISTER  ///////////////


	////////// INIZIALIZZAZIONE CONNESSIONE SERVICE PROVIDER ///////////////

	service_provider.s = inizializza_client( service_provider.ip, service_provider.porta );	

	printf("CONNESSO con il Service Provider %s:%d\n",service_provider.ip,service_provider.porta);

	////////// RICEZIONE DELLA LISTA DELLE IMMAGINI PRESENTI SUL SERVICE PROVIDER ///////////////

	memset( msg, 0, BUFFER_SIZE );
	
	Response_Get_List rgl(service_provider);

	if( !rgl.code_request() )
	{		
		printf("Errore comunicazione con Service Provider durante Get_List\n");
		exit(1);
	}

	printf("La lista delle immagini disponibili è la seguente:\n");		

	if(!rgl.decode_response())
		printf("Errore decodifica della lista inviata dal Service Provider\n");

	close(service_provider.s); 
	
}

